home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_5.lha / 5_5 / 5_5b.c < prev    next >
Text File  |  1993-08-08  |  851b  |  47 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. include <5.5A.h>
  6. tatic void treeval(tree* head)
  7.  
  8.    if (head)
  9. {
  10. switch (head->type)
  11.     {
  12.     case PLUS:
  13.         return treeval(head->left) + treeval(head->right);
  14.  
  15.     case MINUS:
  16.         return treeval(head->left) - treeval(head->right);
  17.  
  18.     case DIV:
  19.         return treeval(head->left) / treeval(head->right);
  20.  
  21.     case MULT:
  22.         return treeval(head->left) * treeval(head->right);
  23.  
  24.     case NEG:
  25.         return -treeval(head->left);
  26.  
  27.     case NUMBER:
  28.         return head->value;
  29.  
  30.     default:
  31.     error("unknown type within tree");
  32.     break;
  33.     }
  34.  
  35.    else
  36.        error("null node found");
  37.    return 0;
  38.  
  39.  
  40. nt expr:: eval()
  41.  
  42.    if (evaluated)
  43.        return value;
  44.    value = treeval(head);
  45.    evaluated++;
  46.  
  47.